package com.deliccio.controller.mantenimientos;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.deliccio.entitys.Cliente;
import com.deliccio.entitys.Estadosgenerales;
import com.deliccio.entitys.Foto;
import com.deliccio.entitys.Grid;
import com.deliccio.entitys.Menu;
import com.deliccio.entitys.Mesa;
import com.deliccio.entitys.Ranking;
import com.deliccio.entitys.Sucursales;
import com.deliccio.entitys.Ubicacion;
import com.deliccio.entitys.Usuario;
import com.deliccio.service.MantenimientoMesasService;
import com.deliccio.service.MantenimientoSucursalesService;
import com.deliccio.service.PrincipalService;
import com.deliccio.util.Constantes;

@Controller
@RequestMapping("/mantenimiento")
public class MantenimientoMesasController{

	@Autowired
	private PrincipalService principalService;

	@Autowired
	private MantenimientoMesasService mantenimientoMesasService;
	
	@Autowired
	private MantenimientoSucursalesService mantenimientoSucursalService;
	
	@RequestMapping(value="/mesas",method=RequestMethod.GET)
	public String mantenimientosProductos(@RequestParam(required=false) Integer inter,HttpSession session,Model model){
		Usuario usuario=(Usuario) session.getAttribute(Constantes.SESION_USUARIO);
		Cliente cliente=(Cliente) session.getAttribute(Constantes.SESION_CLIENTE);
		List<Menu> menus=null;
		if(usuario != null){
			session.setAttribute(Constantes.SESION_USUARIO,usuario);
			menus=principalService.obtenerMenusUsuario(usuario);
		}
		else{
			session.setAttribute(Constantes.SESION_CLIENTE,cliente);
			menus=principalService.obtenerMenusCliente(cliente);
		}
		if(usuario == null && cliente == null){
			menus=principalService.obtenerMenus();
		}

		if(menus != null){
			model.addAttribute("menus",menus);
		}
		List<Ranking> lstProductos = principalService.listaProductos();
		model.addAttribute("lstProductos",lstProductos);
		session.setAttribute(Constantes.SESION_COD_INTER,inter);
		return "mantenimiento/mesas/mesas";
	}

	@RequestMapping(value="/mesas/nuevo",method=RequestMethod.GET)
	public String nuevo(HttpSession session,Model model){	
		Usuario usuario=(Usuario) session.getAttribute(Constantes.SESION_USUARIO);
		if(usuario!=null){					
			List<Estadosgenerales> estados=mantenimientoMesasService.obtenerEstado();			
			int numero = mantenimientoMesasService.obtenernumero(1);
			model.addAttribute("numero", numero);
			if(estados!=null){
				model.addAttribute("estados",estados);
			}
			List<Sucursales> sucursales=mantenimientoMesasService.obtenerSucursales();			
			if(sucursales!=null){
				model.addAttribute("sucursales",sucursales);
			}
			return "mantenimiento/mesas/revisarmesa";
		}
		return null;
	}

	@RequestMapping(value="/mesas/obtenerCabecera",method=RequestMethod.GET)
	public @ResponseBody
	Grid obtenerCabecera(HttpSession session,Model model){
		Integer cod=(Integer) session.getAttribute(Constantes.SESION_COD_INTER);
		Grid grid=mantenimientoMesasService.obtenerGridporCod(cod);
		return grid;
	}

	@RequestMapping(value="/mesas/obtenerDataMesas/{codGrid}",method=RequestMethod.GET)
	public @ResponseBody
	Map<String,Object> obtenerDataMesas(
			@PathVariable Integer codGrid,
			Model model,HttpSession sesion,
			@RequestParam String sidx,
			@RequestParam String sord,
			@RequestParam int page,
			@RequestParam int rows,
			@RequestParam(required=false) boolean _search,
			@RequestParam(required=false) String searchField,
			@RequestParam(required=false) String searchOper,
			@RequestParam(required=false) String searchString
			){		
		Usuario usuario=(Usuario) sesion.getAttribute(Constantes.SESION_USUARIO);
		if(usuario!=null){
			Map<String,Object> tmp=mantenimientoMesasService.obtenerDataMesas(usuario,codGrid,sidx,sord,page,rows,_search,searchField,searchOper,searchString);
			model.addAttribute("size",tmp.size());
			return tmp;
		}
		return null;
		
	}
	
	@RequestMapping(value="/mesas/obtenerSucursales",method=RequestMethod.GET)
	public @ResponseBody List<Sucursales> listaSucursales(){	
		//return mantenimientoMesasService.obtenerSucursales();
		return null;
	}
	
	@RequestMapping(value="/mesas/modificar/{idmesa}",method=RequestMethod.GET)
	public String modificar(HttpSession session,Model model, @PathVariable Integer idmesa, HttpServletRequest request){		
		Usuario usuario=(Usuario) session.getAttribute(Constantes.SESION_USUARIO);		
		List<Estadosgenerales> estados=mantenimientoMesasService.obtenerEstado();
		
		if(usuario!=null){		
			model.addAttribute("idmesa",idmesa);
			
			Mesa mesa = mantenimientoMesasService.buscarMesa(idmesa);		
			if(mesa != null){
				Foto foto=mantenimientoMesasService.buscarFoto(mesa.getFoto(),request);
				mesa.setFoto(foto);
				model.addAttribute("mesa",mesa);
			}		
			if(estados!=null){
				model.addAttribute("estados",estados);
			}
			List<Sucursales> sucursales=mantenimientoMesasService.obtenerSucursales();			
			if(sucursales!=null){
				model.addAttribute("sucursales",sucursales);
			}
			return "mantenimiento/mesas/revisarmesa";
		}
		return null;
	}
	
	@RequestMapping(value="/guardarMesa",method=RequestMethod.POST)
	public @ResponseBody 
	int guardarMesa(Mesa mesa,int x,int y,int w,int h,String fileRuta,String nameImage,String formato,int width,int height,HttpServletRequest request){		
		return mantenimientoMesasService.guardarMesa(mesa, x, y, w, h, fileRuta, nameImage, formato, width, height, request);		
	}
	
	@RequestMapping(value="/subirImagen",method=RequestMethod.POST)
	public @ResponseBody
	String subirArchivo(@RequestParam MultipartFile archivoSubir,HttpServletRequest request) throws IOException,Exception{
		return mantenimientoMesasService.guardarImagenTemporal(archivoSubir,request);
	}
	
}
